<!Doctype html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Document</title>
</head>
<body>

</body>
<script>
// 基础类型和引用类型
// 简单类型和复杂类型
// 数据类型：number string boolean undefined null array object function
// 基础类型：number string boolean undefined null
// 引用类型：object array function

// var a = 10;
// var b = a;
// b = 20;
// console.log(a);


// var arr = ['a','b','c'];
// var brr = arr;
// arr[0] = 'f'
// console.log(brr);

// 基本类型和复杂类型区别：
/*
1.存储不同：基本类型的存储，是将值存到栈中；复杂类型的存储，将值存到堆中，将堆的地址存到栈中
2.赋值不同：基本类型的赋值，将值复制一份放到另一个变量空间中；复杂类型的赋值，将栈中存的地址复制一份放到另一个变量空间中 - 两个变量共用一个数据地址
3.全等比较不同：基本类型在比较栈中存的值；复杂类型数据比较的是栈中存的地址是否全等
*/

var a = 1;
var b = 1;
console.log(a === b); // true


var arr = [1,2,3];
var brr = [1,2,3];
console.log(arr === brr); // false


var arr = ['a','b','c'];

// 希望brr和arr一样，但是不要共用一个地址

// 1.遍历一个一个放进去
var brr = [];
for(var i=0;i<arr.length;i++){
    brr[i] = arr[i]
}
// console.log(arr,brr);
arr[0] = 'f'
console.log(arr,brr);

// 2.使用concat
var brr = arr.concat()

// 3.使用slice
var brr = arr.slice()

// 4.使用JSON转换
var brr = JSON.parse(JSON.stringify(arr));
arr[0] = 'f'
console.log(arr,brr);
</script>
</html>